import { ElMessage } from "element-plus"
const POINT_STYLE = {
  Angle: 0,
  Color: 6,
  Space: 0,
  SymHeight: 5,
  SymID: 21,
  SymWidth: 5,
}
class Point {
  /**
   * @param {array} position [lng,lat]
   * @attr {array}
   * @param {service} {name,layerId}
   * @param {string} docLayer
   */
  static add({ position, attr, service, docLayer }) {
    var gpoint = new Zondy.Object.GPoint(position[0], position[1]) //createPoint();
    //设置当前点要素的几何信息
    var fGeom = new Zondy.Object.FeatureGeometry({ PntGeom: [gpoint] })
    var pointInfo = new Zondy.Object.CPointInfo(POINT_STYLE)
    //设置当前点要素的图形参数信息
    var webGraphicInfo = new Zondy.Object.WebGraphicsInfo({
      InfoType: 1,
      PntInfo: pointInfo,
    })
    /* 属性 */
    var attValue = attr
    /* 1、构建要素 */
    var feature = new Zondy.Object.Feature({
      fGeom: fGeom,
      GraphicInfo: webGraphicInfo,
      AttValue: attValue,
    })
    //设置要素为点要素
    feature.setFType(1)
    //2、创建一个要素数据集
    var featureSet = new Zondy.Object.FeatureSet()
    featureSet.clear()
    //设置属性结构
    var cAttStruct = new Zondy.Object.CAttStruct({
      FldName: ["事件编号", "事件类型", "事件等级", "发生时间", "发生地点", "车牌号", "驾驶员", "处理状态", "mpLayer"],
      FldNumber: attr.length,
      FldType: ["string", "string", "short", "string", "string", "string", "string", "short", "long"],
    })
    featureSet.AttStruct = cAttStruct
    //添加要素到要素数据集
    featureSet.addFeature(feature)
    /* 3、调用服务 */
    //创建一个编辑服务类
    var editService = new Zondy.Service.EditDocFeature(service.name, service.layerId, {
      ip: "localhost",
      port: "6163", //访问IGServer的端口号，.net版为6163，Java版为8089
    })
    //执行添加点要素功能
    editService.add(featureSet, this.onPntSuccess(docLayer))
  }

  static query({ position, service, success }) {
    //1、初始化查询结构对象，设置查询结构包含几何信息
    var queryStruct = new Zondy.Service.QueryFeatureStruct()
    //是否包含几何图形信息
    queryStruct.IncludeGeometry = true
    //是否包含属性信息
    queryStruct.IncludeAttribute = true
    //是否包含图形显示参数
    queryStruct.IncludeWebGraphic = false
    //2、指定查询规则
    var rule = new Zondy.Service.QueryFeatureRule({
      //是否将要素的可见性计算在内
      EnableDisplayCondition: false,
      //是否完全包含
      MustInside: false,
      //是否仅比较要素的外包矩形
      CompareRectOnly: false,
      //是否相交
      Intersect: true,
    })
    //3、实例化查询参数对象
    //创建一个用于查询的点形状
    var pointObj = new Zondy.Object.Point2D(position[0], position[1])
    //设置查询点的搜索半径
    pointObj.nearDis = 1
    var queryParam = new Zondy.Service.QueryParameter({
      geometry: pointObj,
      resultFormat: "json",
      struct: queryStruct,
      rule: rule,
    })
    //4、实例化地图文档查询服务对象
    var queryService = new Zondy.Service.QueryDocFeature(queryParam, service.name, service.layerId, {})
    //执行查询操作，querySuccess为查询回调函数
    queryService.query(success)
  }
  static onPntSuccess(docLayer) {
    return function (data) {
      docLayer.refresh()
      if (data.succeed) {
        ElMessage({
          message: "添加事件成功",
          type: "success",
          duration: 2000,
        })
        docLayer.refresh()
      } else {
        ElMessage({
          message: "添加事件失败",
          type: "error",
          duration: 2000,
        })
      }
    }
  }
}
export default Point
